﻿#pragma once

#include "topo_base.h"

namespace CAGD
{

/**
 * 拓扑 loop，作用是标记环路的方向，判断内外.
 */
class TopoLoop : public TopoBase
{
  public:
    /**
     * @brief 空构造（用于 Mesh）.
     * @see
     */
    TopoLoop();

    /**
     * @brief 析构.
     * @see
     */
    ~TopoLoop();

    /**
     * @brief 所属 face.
     * @return
     * @see
     */
    TopoFace *&Face();

    /**
     * @brief 一条 coedge.
     * @return
     * @see
     */
    TopoCoedge *&Coedge();

    /**
     * @brief 下一条 loop.
     * @return
     * @see
     */
    TopoLoop *&Next();

    /**
     * @brief 获得拓扑方向.
     * @return
     * @see
     */
    TopoDir Dir() const;

    /**
     * @brief 拓扑类型.
     * @return
     * @see
     */
    TopoType Type() const override;

  protected:
    TopoFace *m_face;     // 所属 face
    TopoCoedge *m_coedge; // 包含的一条 coedge（首尾相连，所以不需要数组保存）
    TopoLoop *m_next;     // 下一条 loop
    TopoDir m_dir;        // 拓扑方向
};

} // namespace CAGD
